package src.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
 * 聊天室的服务端版本2
 */
public class Server2 {
         private ServerSocket serverSocket;
        public Server2(){
                try {
                        System.out.println("正在启动服务端!");
                        serverSocket=new ServerSocket(8088);
                        System.out.println("服务端启动完毕!");
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }
        public void start(){
                try {
                      while (true){
                              System.out.println("客户端准备连接");
                              Socket socket=serverSocket.accept();
                              System.out.println("一个客户端连接了");
                              //启动一个线程负责与该客户端交互
                              ClientHandler handler=new ClientHandler(socket);
                              Thread t=new Thread(handler);
                              t.start();
                      }
                        /**
                         * 当我们通过br.readline()读取来自远端计算机
                         */

                } catch (IOException e) {
                        e.printStackTrace();
                }finally {
                        try {
                                serverSocket.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        public static void main(String[] args) {
                Server2 server=new Server2();
                server.start();
        }
        private class ClientHandler implements Runnable{
                private Socket socket;
                private String host;
                private ClientHandler (Socket socket){
                        this.socket=socket;
                        //通过socket获取远端计算机IP地址的字符串格式
                        host=socket.getInetAddress().getHostAddress();
                }

                @Override
                public void run() {
                        try {
                                InputStream in=socket.getInputStream();
                                InputStreamReader isr=new InputStreamReader(in, StandardCharsets.UTF_8);
                                BufferedReader br=new BufferedReader(isr);

                                String message;
                                while ((message= br.readLine())!=null){
                                        System.out.println(host + "说:" +message);
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
}
